#include <typescommon.h>
#include <genrand.h>
#include <pthread.h>
#include <threadExcuter.h>

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
// 僵尸进程：子进程退出，父进程没有wait进行释放。
// 孤儿进程：父进程退出，子进程被init进程领养。资源如tmpval依然占用。
// 父子进程变量不共享！虽然打印的地址是一样的。那是进程的虚拟地址？
int gloabval = 3;
int main(int argc, char **argv)
{
    pid_t pid = fork();
    int tmpval = 1;
    if (pid == -1)
    {
        // 错误处理
        perror("fork failed");
        return 1;
    }
    else if (pid == 0)
    {
        // 子进程中执行的代码
        logdebug("child's pid:%d", getpid());
        
        tmpval = 2;
        gloabval = 4;
        logdebug("child get val:%p,%d", &tmpval, tmpval);
        logdebug("child get gloab:%p,%d", &gloabval, gloabval);
        // sleep(1);
        logdebug("child finish:%d", getpid());
    }
    else
    {
        // 父进程中执行的代码
        logdebug("prarent's pid:%d", getpid());
        sleep(1);
        logdebug("prarent get val:%p,%d", &tmpval, tmpval);
        logdebug("prarent get gloab:%p,%d", &gloabval, gloabval);
        // tmpflag == 子进程pid
        int tmpflag = waitpid(pid, &tmpval, 0);
        logdebug("prarent finish:%d, %d", tmpflag, tmpval);
    }
    return 1;
}
